#ifndef PAGE_H
#define PAGE_H

#include <iostream>
#include <vector>
#include <sstream>
#include <deque>
#include <fstream>
#include <exception>
#include "User.h"
#include "ActionManager.h"
#include "Menu.h"
#include "DateTime.h"

using namespace std;
//@author U095387X
class Page{

private:
	User *_curUser;
	ActionManager *_curActionManager;

public:
	void initialize(User *UIUser, ActionManager *UIActionManager);
	int showPage(e_state curState, e_category mCategory, e_method _mMethod, e_dateRange _mDateRange);
	string categoryEnumtoString(e_category category);
	string methodEnumtoString(e_method method);
	int categoryEnumtoInt(e_category category);
	int methodEnumtoInt(e_method method);
	e_category categoryInttoEnum(int s_cat);
	e_method methodInttoEnum(int s_met);
	void addExpense(e_category mCategory, e_method mMethod);
	int printList(e_dateRange _mDateRange);
	void delExpense(list<Expense> mylist);
	void upExpense(list<Expense> mylist);

	void addWish();
	int printWishList(e_dateRange _mDateRange);
	void delWish(list<Wish> mylist);
	void upWish(list<Wish> mylist);

	void addLoan();
	int printLoanList(e_dateRange _mDateRange);
	void delLoan(list<Loan> mylist);
	void upLoan(list<Loan> mylist);

	void addIncome();
	int printIncomeList(e_dateRange _mDateRange);
	void delIncome(list<Income> mylist);
	void upIncome(list<Income> mylist);
	
	void undoAction();
	int printReport(e_dateRange _mDateRange);
	void expReport(list<Expense> mylist_e,list<Income> mylist_i);
	void updateUser();

	bool impReport();
};


#endif